package com.example.mybatis.config;

import com.example.mybatis.handler.type.handler.TypeHandler;
import com.example.mybatis.mapper.MapperClass;
import com.example.mybatis.mapper.MapperMethod;
import   com.example.mybatis.plugin.Interceptor;
import javax.sql.DataSource;
import java.sql.Connection;
import java.util.List;

public interface Config {
    //获取数据源
    DataSource getDataSource();
    Connection getConnection();
    MapperClass  getMapperData(final Class clazz);
    MapperMethod  getMapperMethod(final Class clazz,final String methodName);
    /**
     * 获取拦截器列表
     * @return 拦截器实现
     * @since 0.0.2
     */
    List<Interceptor> getInterceptorList();

    /**
     * 获取类型的别称
     * @param alias 别称
     * @return 结果
     * @since 0.0.5
     */
    String getTypeAlias(final String alias);

    /**
     * 新建对象
     * @param tClass 类型
     * @param <T> 泛型
     * @return 结果
     * @since 0.0.6
     */
    <T> T newInstance(final Class<T> tClass);
    /**
     * 获取类型处理类
     * @param javaType Java 类
     * @param <T> 泛型
     * @return 处理类
     * @since 0.0.4
     */
    <T> TypeHandler<T> getTypeHandler(final Class<T> javaType);
}